Skip to content

refactor(core): separate Indexed from container MultiFocus - #129

Open
kryptt wants to merge 7 commits into
mainfrom
spike/grate-broadcast-sum
Open

kryptt wants to merge 7 commits into
mainfrom
spike/grate-broadcast-sum

Conversation

@kryptt

@kryptt kryptt commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Separate fixed-index optics from container MultiFocus

This PR replaces the original grate-constancy experiment with the full-grid design and removes the dedicated legacy Grate implementation from MultiFocus. Container traversal and aggregation remain intact.

Fixed-index optics

Indexed extends Optic with a single named-tuple carrier:

type GlassF[I] = [X, A] =>> (context: X, values: I => A)

The existing existential X is the residual context. to and from are the only decomposition/reconstruction methods: no Context alias, opaque GlassK, pack/accessor boilerplate, split/rebuild synonyms, SameFocus, CoordinateEq, or representative-index witness.

The dedicated glass andThen retains both index axes (I,J) and per-coordinate contexts. Reads expose the full grid; polymorphic writes rebuild each row from its corresponding slice, without coordinate equality or evidence visibility influencing behavior. Indexed.Grate is the X = Unit alias; context-bearing optics are the more general Glass case.

Removed legacy APIs (source/binary breaking)

  • MultiFocus representable, tuple, zip, zipWith
  • Function1 AssociativeFunctor kernel and Direct bridge
  • Function1BroadcastOptic, unobserved sentinel, RepresentativeIndex
  • Obsolete witness/legacy zip tests

Generic MultiFocus apply/pApply, functor-based modification/widening and representable-gated at remain; function containers can still be modified pointwise through these generic operations. List/PSVec and other container kernels are unchanged. Traversal.two/three/four already use PSVec and retain their tested composition paths.

Correctness and migration

  • collectList passes its observed context to reconstruction rather than inventing a leftover. Its guarantee concerns the singleton focus vector, not a singleton reconstructed source; count-coupled composites may reject changed cardinality.
  • GlassSpec tests arbitrary tabulations, non-Unit contexts, polymorphic writes, reassociated three-level grids, empty/permuted/NaN/signed-zero indexes and widening to Optic.
  • Migrated full-grid law properties and the lead-sampling unlawful fixture; retained compiler grid and added runtime/typed-result checks.
  • Benchmark tuple constructors now use Indexed with total finite-index Representables. Historical diagonal and full-grid measurements are not equivalent workloads.
  • README, agent guide, changelog, migration/reference/cookbook/site docs and QA/taxonomy generators updated; old research notes explicitly historical/superseded.

Remaining prototype limits

No general classical-family Composer bridges or same-index AssociativeFunctor are installed. The existing writable-outer Optic extension supports glass.andThen(Modify). Unit-context composition normalization and context-free zip/collect operations remain open; no top-level Grate companion exists yet.

Verification

Local sbt 1.13.0 / Scala 3.9.0 / JDK 27:

  • full root test: passed (including Avro/jsoniter and fixed-arity Traversal suites)
  • corrected GrateShapeSpec: 26 examples passed; generated table projects 3 composing /21 unsupported cells
  • benchmarks/compile: passed
  • scalafmtCheckAll and scalafixAll --check: passed
  • docs/mdoc: 0 errors; six existing heading-anchor warnings reflect mdoc/Laika slug differences
  • docs/laikaSite: passed with the rendered site's valid anchors retained
  • changed benchmark files formatted and checked; unrelated benchmark-wide import-order drift not rewritten

Python is unavailable locally, so QA fixture counts were independently checked with the generator-equivalent parser; the full Python QA generator was not executed here. GitHub checks on this new head are pending.

Runnable usage examples

site/docs/indexed.md documents Grates and context-bearing Glasses with 20 executable assertions:

  • environment-dependent settings, coordinate reads, broadcast replacement and polymorphic writes;
  • product-index grids with off-diagonal updates;
  • labelled readings with arbitrary named-tuple from reconstruction;
  • nested reconstruction preserving every row's metadata.

The trait and companion now live in optics/Indexed.scala; only the GlassF carrier alias remains in data/Glass.scala. Navigation, reference pages, imports, QA generation and agent documentation use these names consistently.

Latest checks: focused core/law/shape tests and benchmarks compilation passed; scalafmtCheckAll and scalafixAll --check passed; docs/mdoc executes all new examples successfully; docs/laikaSite and core/doc passed. Existing mdoc/Laika anchor warnings and two pre-existing Traversal Scaladoc links remain. GitHub CI on the new head is pending.

kryptt added 2 commits October 2, 2026 21:09
Rebased onto `52671355` (the optic-class answer: `Z = Xo`,
`Function1BroadcastOptic`, `RepresentativeIndex`, the positional write).
That commit and this one answer different questions, and this rebase keeps
upstream's machinery — and upstream's *idiom* — wherever it is better:

- **kept** `Function1BroadcastOptic` as the kernel's per-index write hook
  (one value per position, no bundle read it did not build) and the
  bridge's `RepresentativeIndex[X0]` witness;
- **added** the sum: the focus half is `F[A] | Broadcast[F, A]` (both cases
  `private[eo]`), with `MultiFocus.broadcast` / `.broadcast` as the public
  handles and `.foci` total for both (the index-free case carries its `F[A]`
  image);
- **added** the kernel's remaining cases: a composite inner is written per
  position with the leftover *its own* read produced (upstream forges it, so
  a `fromLensF` inner NPEs), and a tabulating ∘ tabulating composite writes
  the exact inverse of its diagonal read. That last one needs `C =:= D`,
  which is a property of the *optic* — so it rides on the optic as
  `Optic.SameFocus` (mixed into every `andThen` composite from the call
  site's `summonFrom`, and into the monomorphic factories
  `representable` / `tuple` / `apply` with `Some(…)`), and the kernel reads
  it off the `inner` it is already handed. `AssociativeFunctor` and the
  composition algebra are untouched (zero diff vs upstream).
- **deleted `unobserved`** — no write needs a stand-in any more. Its three
  historical sites are fixed at the source: the kernel records the inner
  leftovers its read observed, the bridge takes a real index witness, and
  the shape-collapsing `collectList` now hands the write the leftover its
  own read produced (`o.from((bundle.context, List(agg(bundle.foci))))`),
  which fixes a live NPE / `MatchError` on Lens / Prism / Optional
  provenances (probed before the fix).

New coverage: `tests/.../MultiFocusCrossFamilySpec.scala` is the runtime
twin of `CompositionMatrixSpec` — nine property blocks over every inbound
provenance (generic factory, polymorphic factory, Iso/Lens/Prism/Optional
bridges, a composite of two shipped optics) through `modify` / `replace` /
`collectMap` / `collectWith` / `collectList` / `foldMap` / `headOption` /
`length`, plus both composition directions across Iso / Lens / Prism /
Optional with independently computed expectations. The collapsing
aggregate is asserted only where the optic's leftover is count-agnostic; a
composite's is the one named boundary (see the note).

Measured against `52671355` (throwaway printing spec, removed again):
`tuple ∘ tuple.modify(identity)` on `((1,2),(3,4))` → `((1,4),(1,4))` there,
identity here; `replace(9)` → `((9,9),(9,9))` there, `((9,2),(3,9))` here;
`tuple ∘ (shim ∘ shim).modify(_+1)` on `(1,2)` → `(2,2)` there, `(2,3)`
here; a `fromLensF` inner NPEs there; `collectList` NPEs / MatchErrors there
and works here.

Upstream's own `MultiFocusFunction1Spec` is kept verbatim (14 examples /
349 expectations) and passes against this kernel; this branch's core
`MultiFocusFunction1CompositionSpec` adds 13 blocks / 1003 expectations and
`external/EoOpaqueSurfaceSpec` pins the public surface from outside the
`eo` package tree. Gates (sbt 1.13.0, JDK 25): root `test` 237 examples /
0 failures, `scalafmtCheckAll`, `scalafixAll --check`, `scalafmtSbtCheck`,
`benchmarks/scalafmtCheck`, `mimaReportBinaryIssues`, `githubWorkflowCheck`,
`docs/mdoc` 0 errors, `docs/laikaSite`, `core/doc`.
… stryker blocker (#115) (#128)

* build(deps): bump actions/cache from v4 to v6

Supersedes #118. Drop-in verified: action.yml inputs are byte-identical
between v4.3.0 and v6.1.0 (only the node20 -> node24 runtime line
differs); all 18 steps pass exactly {path, key, restore-keys}; @v6
resolves to v6.1.0, which adds graceful handling of read-only cache
tokens (the accurate 'cache write denied' warning on fork PRs instead
of the bogus 'another job may be creating this cache').

* build(deps): bump droste-core from 0.9.0-M3 to 0.10.0

Supersedes #124. Benchmark-only dependency (never published downstream).
0.10.0 is dependency maintenance upstream (cats update,
scala-collection-compat 2.13.0, Scala.js 1.18.2); our droste surface
(Fix, scheme.{cata,ana,hylo}, Algebra/Coalgebra) compiles unchanged and
all nine SchemesBench benchmarks execute on the new version.

* build(deps): bump sbt-stryker4s from 0.20.4 to 1.1.1

Supersedes #126. No removed or renamed features reach this build: the
setting keys used in build.sbt (strykerReporters, strykerExcludedMutations,
strykerThresholdsBreak) are unchanged, the borrowed-tests wiring still
resolves, and 1.x requires sbt >= 1.11.2 (we run 1.13.0). Verified with a
schemes smoke run (48/58 killed, 0 NoCoverage) and a full avroIntegration
run (481 killed / 51 survived / 58 known-macro NoCoverage, no crash).

Decisive for issue #115: 1.1.1 fixes stryker4s' rollback invariant crash
('cases should be non-empty') that killed avro's mutation run on main —
0.20.4's mutant removal could empty a Term.Match by deleting its default
Pat.Wildcard case; 1.1.1 filters it. Also refreshes the invocation-doctrine
comment: the module-scoped <m>/stryker form works again since 0.20.4.

* fix(avro): keep AvroWalk's null-narrowing outside stryker's reach

Addresses #115 blocker 1. The flow-typed 'val here = if index != null
then index else ...' loses its narrowing the moment stryker4s' mutator
rewrites the condition, so two mutants died as compile errors instead of
being exercised (and on 0.20.4 that rollback crashed the whole run).

Express the narrowing as a match on the null sentinel with an explicit
JMap[String, Integer] type: a match has no condition to mutate, so the
narrowing is structural rather than flow-based. (The ascribe + 'index.nn'
spelling from the issue does not compile here — the guard already narrows,
E216 fires, and -Werror rejects the warning.) Applied at both occurrences
(totalNominalIndex and recordSlots); AvroCompileError mutants from
AvroWalk go to zero.

* docs: refresh version pins and the stryker invocation doctrine

CLAUDE.md said Scala 3.8.3 / sbt 1.12.9; the project builds Scala 3.9.0
(build.sbt scala3Version) on sbt 1.13.0 (project/build.properties).
CONTRIBUTING.md's bootstrap list pointed Scala at build.properties and
omitted the JDK 25 requirement for kyo + the docs site.

The 'invoke as project <m>; stryker, NOT <m>/stryker' claim stopped being
true in 0.20.4 (module-scoped task resolution was fixed upstream); state
the history instead of forbidding the working form. The mutationAll alias
also covers zio and kyo now, not just the original eight modules.
quality-assurance.md's scoverage path follows the Scala version.

* build(ci): bump the workflow generator's actions/cache ref to v6

The cache bump landed as a hand-edit of the generated ci.yml (mirroring
Dependabot's #118 diff), which githubWorkflowCheck rightly flags: ci.yml
is generator-owned (CONTRIBUTING.md: never hand-edit it). This pairs the
edit with its source of truth — UseRef.Public("actions", "cache", "v6")
in the setup-java cache patch. githubWorkflowGenerate now emits zero
workflow drift, so the committed ci.yml is exactly generated output, and
githubWorkflowCheck passes.
@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

🚀 Cloudflare Pages preview for spike/grate-broadcast-sum is live:

https://364caec8.cats-eo-docs.pages.dev

Branch alias: https://spike-grate-broadcast-sum.cats-eo-docs.pages.dev

Built from commit 470caa7a583e4d71557ed1d2cb69fca7b9a81bad · updated on every push.

@github-actions

github-actions Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Benchmark A/B

Allocation (B/op) — authoritative

Benchmark params base head Δ
JsoniterBench.jReadId size=8 48.0 72.0 +50.0%
PlatedBench.visitorUniverseJson n=4096 524,368.6 294,977.0 -43.7%
OrderJsoniterBench.eoReadStreet size=64 128.0 72.0 -43.7%
JsoniterBench.jReadId size=512 72.0 48.0 -33.3%
TraversalBench.eoFoldNested size=8 328.0 424.0 +29.3%
MultiFocusCollectBench.eoModify_multiFocusTuple3 - 128.0 96.0 -25.0%
GetterBench.mGet_6 - 0.0 0.0 +25.0%
GetterBench.mGet_orderId - 0.0 0.0 -14.8%
CapsBench.foldMapDerivedPerCall - 0.0 0.0 -11.5%
CapsBench.getDeepDirect - 0.0 0.0 -11.1%
MultiFocusCollectBench.eoModify_multiFocusTuple6 - 224.0 248.0 +10.7%
CapsBench.getCap - 0.0 0.0 -10.2%
CapsBench.getDerivedHeld - 0.0 0.0 -10.1%
CapsBench.getDirect - 0.0 0.0 -9.9%
AffineFoldBench.eoGetOption_loyalty - 0.0 0.0 -9.6%
CapsBench.foldMapDerivedHeld - 0.0 0.0 -9.4%
AffineFoldBench.mGetOption_0_empty - 0.0 0.0 -9.3%
GetterBench.mGet_3 - 0.0 0.0 -8.9%
CapsBench.getDerivedPerCall - 0.0 0.0 -8.7%
OrderAvroBench.eoModifyNames size=8 1,968.0 2,136.0 +8.5%
442 more benchmarks
Benchmark params base head Δ
GenericsBench.genPrismGetMiss - 0.0 0.0 -8.5%
CapsBench.foldMapDirect - 0.0 0.0 -8.2%
JsoniterBench.jMiss size=512 0.0 0.0 -7.6%
CapsBench.foldMapCap - 0.0 0.0 -7.6%
SchemesBench.handHylo - 0.1 0.1 +7.6%
AffineFoldBench.mGetOption_0 - 0.0 0.0 -7.5%
GenericsBench.genPrismModifyMiss - 0.0 0.0 -7.4%
LensBench.eoGet - 0.0 0.0 -7.3%
AffineFoldBench.eoGetOption_0_empty - 0.0 0.0 +7.2%
JsoniterBench.jMiss size=8 0.0 0.0 -7.2%
JsoniterBench.jMiss size=64 0.0 0.0 -7.1%
AffineFoldBench.eoGetOption_0 - 0.0 0.0 +7.0%
LensBench.mGet - 0.0 0.0 -6.7%
GenericsBench.genLensGet - 0.0 0.0 -6.6%
KyoDiBench.handMapGet - 0.0 0.0 -6.5%
AffineFoldBench.mGetOption_loyalty_empty - 0.0 0.0 -5.9%
OrderJsoniterBench.monocleSumPrices size=8 6,104.0 6,448.0 +5.6%
GetterBench.eoGet_3 - 0.0 0.0 -5.6%
MultiFocusCollectBench.eoCollectMap_constSum - 0.0 0.0 -5.5%
PrismBench.eoGetOptionAbsent - 0.0 0.0 -5.3%
GenericsBench.handPrismModifyMiss - 0.0 0.0 -5.3%
GetterBench.mGet_0 - 0.0 0.0 -5.2%
SchemesBench.handCata - 0.1 0.1 +5.2%
GetterBench.eoGet_0 - 0.0 0.0 -5.1%
GenericsBench.handLensGet - 0.0 0.0 -4.6%
OptionalBench.eoModify_0_empty - 0.0 0.0 -4.5%
KyoDiBench.eoMapGet - 0.0 0.0 -4.4%
FoldBench.mFoldMap size=8 0.0 0.0 -4.3%
OptionalBench.eoModify_loyalty_empty - 0.0 0.0 -4.3%
PrismBench.eoGetRightAbsent - 0.0 0.0 -4.2%
AffineFoldBench.mGetOption_3 - 0.0 0.0 -4.1%
GenericsBench.rawLensGet - 0.0 0.0 -3.4%
GetterBench.eoGet_6 - 0.0 0.0 -3.3%
AffineFoldBench.eoGetOption_loyalty_empty - 0.0 0.0 -3.2%
AffineFoldBench.mGetOption_loyalty - 0.0 0.0 -3.1%
ZioDiBench.eoServiceGet - 0.0 0.0 -3.0%
CapsBench.getDeepCap - 0.0 0.0 -2.8%
OptionalBench.mModify_0_empty - 0.0 0.0 +2.8%
OpticBuildBench.reuseUse - 2,720.0 2,648.0 -2.6%
OpticBuildBench.buildAndUse - 2,816.0 2,888.0 +2.6%
AffineFoldBench.eoGetOption_0_asAffineFold - 0.0 0.0 -2.5%
GetterBench.eoGet_orderId - 0.0 0.0 -2.4%
OrderCirceBench.directNames size=64 76,151.2 77,712.1 +2.0%
OrderCirceBench.eoNames size=64 77,738.5 79,298.5 +2.0%
OrderCirceBench.eoNames size=8 10,944.1 10,728.1 -2.0%
OrderCirceBench.eoNamesIor size=64 85,937.5 87,488.5 +1.8%
PowerSeriesNestedBench.eoModify_nested size=16 4,720.0 4,792.0 +1.5%
MultiFocusBench.naive_sumQty size=4 0.0 0.0 +1.5%
AvroVulcanBench.encode_vulcanRaw - 1,224.0 1,240.0 +1.3%
AvroVulcanBench.encode_bridged - 1,240.0 1,224.0 -1.3%
AvroJsonBridgeBench.eoClickToJson - 4,000.0 3,952.0 -1.2%
ZioDiBench.eoDrillGet - 0.0 0.0 -1.2%
FoldBench.eoFoldMap size=8 0.0 0.0 +1.1%
PrismBench.eoGetOptionPresent - 0.0 0.0 -1.0%
OrderCirceBench.directStreet size=512 2,728.6 2,752.6 +0.9%
PrismBench.mGetOptionAbsent - 0.0 0.0 -0.8%
GenericsBench.handPrismGetMiss - 0.0 0.0 -0.8%
AffineFoldBench.mGetOption_6 - 0.0 0.0 -0.6%
PowerSeriesNestedBench.monocle_nested size=4 5,568.0 5,536.0 -0.6%
PrismBench.mGetOptionPresent - 0.0 0.0 +0.6%
JsoniterBench.cSumPrices size=8 22,720.1 22,608.1 -0.5%
PowerSeriesNestedBench.eoModify_nested size=64 14,664.5 14,592.5 -0.5%
OptionalBench.mModify_loyalty_empty - 0.0 0.0 -0.4%
PowerSeriesNestedBench.eoModify_nested size=256 53,674.1 53,770.3 +0.2%
PrismBench.mGetRightAbsent - 0.0 0.0 -0.2%
OrderJsoniterBench.nativeSumPrices size=8 1,512.7 1,515.1 +0.2%
PowerSeriesNestedBench.monocle_nested size=64 58,833.1 58,913.0 +0.1%
JsoniterBench.cReplaceId size=8 20,667.2 20,640.1 -0.1%
OrderJsoniterBench.nativeSumPrices size=64 10,921.7 10,934.5 +0.1%
JsoniterBench.cModifyId size=8 20,691.1 20,715.1 +0.1%
OrderJsoniterBench.nativeReadStreet size=512 450.7 451.1 +0.1%
OrderJsoniterBench.nativeSumPrices size=512 86,347.4 86,439.3 +0.1%
OrderCirceBench.monocleNames size=8 19,456.1 19,472.1 +0.1%
JsoniterBench.jModifyId size=512 41,945.7 41,921.6 -0.1%
JsoniterBench.cSumPrices size=64 156,586.4 156,675.8 +0.1%
OrderJsoniterBench.monocleSumPrices size=64 45,835.7 45,817.3 -0.0%
OrderCirceBench.eoStreet size=8 2,720.0 2,721.1 +0.0%
OrderCirceBench.eoStreet size=512 2,721.5 2,720.6 -0.0%
OrderJsoniterBench.naiveModifyStreet size=512 333,534.1 333,434.5 -0.0%
OrderCirceBench.eoStreetIor size=8 2,736.0 2,736.8 +0.0%
OrderCirceBench.eoStreetIor size=512 2,736.7 2,737.4 +0.0%
OrderCirceBench.monocleNames size=64 132,789.9 132,758.8 -0.0%
PowerSeriesNestedBench.eoModify_nested size=1024 210,646.0 210,598.1 -0.0%
OrderAvroBench.monocleModifyNames size=64 39,865.0 39,856.3 -0.0%
PowerSeriesPrismBench.eoModify_sparse size=2048 104,681.3 104,703.1 +0.0%
PowerSeriesBench.monocle_powerEach size=256 107,334.8 107,354.8 +0.0%
OrderCirceBench.monocleStreet size=64 113,796.0 113,811.6 +0.0%
OrderCirceBench.eoStreet size=64 2,720.9 2,721.2 +0.0%
OrderCirceBench.naiveStreet size=64 113,803.9 113,790.3 -0.0%
OrderJsoniterBench.nativeReadStreet size=64 424.4 424.4 +0.0%
MultiFocusBench.eoModify_multiFocus size=1024 331,083.5 331,104.8 +0.0%
JsoniterBench.jSumPrices size=512 63,630.1 63,634.1 +0.0%
PowerSeriesPrismBench.monocle_sparse size=8 1,952.1 1,952.0 -0.0%
OrderJsoniterBench.monocleModifyStreet size=512 333,558.5 333,543.0 -0.0%
OrderCirceBench.eoNamesIor size=512 683,493.1 683,517.9 +0.0%
OrderJsoniterBench.eoReadStreet size=512 128.2 128.2 -0.0%
OrderAvroBench.monocleModifyStreet size=512 169,083.5 169,078.2 -0.0%
OrderCirceBench.hcursorNames size=64 77,803.0 77,801.0 -0.0%
JsoniterBench.cReadId size=64 101,302.5 101,300.2 -0.0%
OrderCirceBench.naiveStreet size=512 908,001.8 908,018.9 +0.0%
OrderJsoniterBench.eoSumPrices size=512 63,682.0 63,683.1 +0.0%
OrderJsoniterBench.naiveSumPrices size=512 230,099.6 230,103.5 +0.0%
OrderJsoniterBench.naiveReadStreet size=512 193,207.7 193,211.0 +0.0%
OrderCirceBench.directNames size=512 613,943.3 613,933.8 -0.0%
OrderJsoniterBench.monocleReadStreet size=512 193,207.5 193,209.9 +0.0%
PowerSeriesBench.naive_powerEach size=4096 114,778.5 114,779.9 +0.0%
OrderAvroBench.naiveReadStreet size=512 69,785.0 69,784.2 -0.0%
JsoniterBench.cReadStreet size=64 101,302.5 101,301.4 -0.0%
JsoniterBench.jReadStreet size=512 152.0 152.0 -0.0%
PlatedBench.mUniverseExpr n=4096 4,689,043.6 4,689,093.5 +0.0%
PowerSeriesBench.monocle_powerEach size=4 1,176.0 1,176.0 -0.0%
PowerSeriesNestedBench.naive_nested size=1024 115,071.9 115,070.9 -0.0%
OrderJsoniterBench.eoModifyStreet size=512 42,029.5 42,029.9 +0.0%
PlatedBench.eoUniverseJson n=4096 786,455.9 786,449.3 -0.0%
OrderCirceBench.hcursorStreet size=512 3,032.7 3,032.7 -0.0%
JsoniterBench.cReplaceId size=512 1,066,674.6 1,066,666.3 -0.0%
OrderCirceBench.hcursorNames size=512 601,624.6 601,620.2 -0.0%
PowerSeriesBench.eoModify_powerEach size=4096 164,364.4 164,363.3 -0.0%
PlatedBench.visitorTransformDeep n=4096 163,887.7 163,886.6 -0.0%
JsoniterBench.cSumPrices size=512 1,240,733.0 1,240,740.9 +0.0%
PlatedBench.mUniverseJson n=4096 6,491,168.2 6,491,200.3 +0.0%
OrderJsoniterBench.monocleSumPrices size=512 1,178,344.7 1,178,350.2 +0.0%
JsoniterBench.cModifyId size=64 136,271.9 136,272.5 +0.0%
PowerSeriesNestedBench.monocle_nested size=256 430,194.0 430,192.1 -0.0%
PowerSeriesPrismBench.monocle_sparse size=512 166,692.0 166,691.3 -0.0%
PlatedBench.visitorUniverseDeep n=4096 196,706.2 196,705.4 -0.0%
PlatedBench.visitorUniverseJson n=512 40,954.0 40,954.2 +0.0%
PowerSeriesNestedBench.monocle_nested size=1024 1,118,807.5 1,118,803.6 -0.0%
OrderJsoniterBench.monocleReadStreet size=64 24,704.8 24,704.9 +0.0%
PowerSeriesBench.monocle_powerEach size=4096 967,857.2 967,853.9 -0.0%
OrderJsoniterBench.monocleModifyStreet size=64 30,081.5 30,081.6 +0.0%
OrderJsoniterBench.nativeReadStreet size=8 424.0 424.0 +0.0%
PowerSeriesPrismBench.naive_sparse size=2048 24,612.8 24,612.7 -0.0%
JsoniterBench.cReadId size=512 797,919.8 797,917.4 -0.0%
OrderJsoniterBench.naiveModifyStreet size=64 30,057.5 30,057.6 +0.0%
OrderAvroBench.naiveModifyNames size=512 226,293.4 226,294.1 +0.0%
PlatedBench.eoTransformDeep n=4096 624,379.6 624,381.4 +0.0%
OrderAvroBench.monocleReadStreet size=512 69,785.0 69,784.8 -0.0%
JsoniterBench.cReadStreet size=512 797,919.9 797,917.6 -0.0%
MultiFocusBench.naive_sumQty size=1024 16,129.4 16,129.3 -0.0%
PlatedBench.eoUniverseExpr n=4096 786,414.3 786,416.5 +0.0%
MultiFocusBench.eoModify_powerEach size=256 26,080.4 26,080.5 +0.0%
PlatedBench.mTransformExpr n=4096 753,722.0 753,720.0 -0.0%
OrderCirceBench.naiveNames size=64 120,832.0 120,831.7 -0.0%
PowerSeriesBench.eoModify_powerEach size=1024 41,413.5 41,413.4 -0.0%
JsoniterBench.jSumPrices size=64 8,120.3 8,120.3 -0.0%
PowerSeriesNestedBench.naive_nested size=256 29,019.4 29,019.3 -0.0%
PowerSeriesPrismBench.eoModify_sparse size=512 24,785.5 24,785.5 -0.0%
OrderCirceBench.monocleNames size=512 1,121,748.6 1,121,750.9 +0.0%
OrderJsoniterBench.naiveSumPrices size=64 29,336.9 29,337.0 +0.0%
OrderCirceBench.eoNames size=512 613,981.6 613,980.4 -0.0%
PlatedBench.eoTransformExpr n=4096 655,351.1 655,352.3 +0.0%
OrderAvroBench.monocleModifyNames size=512 382,754.4 382,753.8 -0.0%
PlatedBench.visitorTransformExpr n=4096 360,471.5 360,470.9 -0.0%
MultiFocusBench.naive_listMap size=1024 65,578.7 65,578.8 +0.0%
TraversalBench.mModify size=512 176,897.9 176,898.2 +0.0%
FoldBench.mFoldPrices size=512 12,312.4 12,312.4 -0.0%
JsoniterBench.jReadStreet size=64 152.0 152.0 -0.0%
OrderCirceBench.naiveNames size=512 965,240.5 965,242.0 +0.0%
PowerSeriesBench.monocle_powerEach size=1024 279,426.9 279,427.3 +0.0%
PlatedBench.visitorUniverseExpr n=4096 196,652.9 196,652.7 -0.0%
MultiFocusBench.eoModify_powerEach size=1024 115,176.2 115,176.1 -0.0%
OrderAvroBench.eoModifyStreet size=512 328.0 328.0 -0.0%
TraversalBench.mFoldPrices size=512 162,564.5 162,564.7 +0.0%
OrderJsoniterBench.monocleModifyStreet size=8 4,664.1 4,664.1 +0.0%
OrderCirceBench.monocleStreet size=512 908,003.6 908,002.7 -0.0%
PowerSeriesPrismBench.eoModify_sparse size=128 4,816.1 4,816.1 -0.0%
OrderCirceBench.eoStreetIor size=64 2,736.1 2,736.1 -0.0%
OrderJsoniterBench.eoSumPrices size=8 1,176.0 1,176.0 -0.0%
PlatedBench.visitorUniverseExpr n=512 24,584.7 24,584.6 -0.0%
PlatedBench.eoUniverseDeep n=4096 786,606.7 786,607.3 +0.0%
OrderJsoniterBench.monocleReadStreet size=8 3,648.0 3,648.0 +0.0%
OrderJsoniterBench.eoReadStreet size=8 72.0 72.0 -0.0%
OrderAvroBench.eoModifyNames size=512 97,422.2 97,422.1 -0.0%
OrderCirceBench.hcursorStreet size=64 3,032.1 3,032.1 -0.0%
OrderAvroBench.eoReadStreet size=512 88.0 88.0 +0.0%
PlatedBench.mUniverseJson n=512 699,933.5 699,933.0 -0.0%
JsoniterBench.jReadStreet size=8 128.0 128.0 -0.0%
MultiFocusBench.eoFold_powerEach size=1024 43,036.2 43,036.2 +0.0%
OrderJsoniterBench.naiveReadStreet size=64 24,704.9 24,704.9 +0.0%
OrderJsoniterBench.naiveModifyStreet size=8 4,640.1 4,640.1 +0.0%
JsoniterBench.cReplaceId size=64 136,224.2 136,224.3 +0.0%
PowerSeriesPrismBench.naive_sparse size=512 6,176.4 6,176.4 -0.0%
PlatedBench.eoUniverseJson n=512 98,186.4 98,186.4 +0.0%
PlatedBench.eoTransformDeep n=512 57,361.3 57,361.4 +0.0%
TraversalBench.eoFoldPrices size=512 12,312.3 12,312.3 +0.0%
PlatedBench.visitorTransformExpr n=512 45,032.8 45,032.8 -0.0%
OrderJsoniterBench.eoSumPrices size=64 8,121.1 8,121.1 -0.0%
AffineFoldBench.eoGetOption_6 - 16.0 16.0 -0.0%
JsoniterBench.jSumPrices size=8 1,176.0 1,176.0 -0.0%
OrderCirceBench.hcursorStreet size=8 3,032.0 3,032.0 +0.0%
TraversalBench.eoFoldNested size=512 20,200.8 20,200.8 -0.0%
PlatedBench.eoUniverseDeep n=64 12,360.0 12,360.0 +0.0%
PlatedBench.eoUniverseDeep n=512 98,377.8 98,377.9 +0.0%
OrderJsoniterBench.eoModifyStreet size=64 5,432.1 5,432.1 +0.0%
OrderAvroBench.eoReadStreet size=64 88.0 88.0 -0.0%
PowerSeriesPrismBench.monocle_sparse size=2048 523,140.4 523,140.2 -0.0%
OrderCirceBench.hcursorNames size=8 10,768.1 10,768.1 -0.0%
PlatedBench.mUniverseExpr n=512 475,026.4 475,026.2 -0.0%
MultiFocusBench.eoFold_powerEach size=256 9,240.2 9,240.2 -0.0%
PlatedBench.mUniverseExpr n=64 45,424.6 45,424.5 -0.0%
OrderJsoniterBench.naiveSumPrices size=8 4,248.0 4,248.0 +0.0%
PowerSeriesBench.eoModify_powerEach size=64 3,008.0 3,008.0 -0.0%
JsoniterBench.jReplaceId size=512 41,913.7 41,913.7 +0.0%
PlatedBench.eoUniverseJson n=64 12,168.0 12,168.1 +0.0%
PowerSeriesPrismBench.naive_sparse size=128 1,568.0 1,568.0 -0.0%
PowerSeriesBench.naive_powerEach size=64 1,848.0 1,848.0 -0.0%
PowerSeriesBench.naive_powerEach size=256 7,224.2 7,224.2 +0.0%
TraversalBench.eoModify size=512 36,897.2 36,897.2 +0.0%
PowerSeriesBench.naive_powerEach size=1024 28,730.7 28,730.7 +0.0%
PlatedBench.visitorUniverseJson n=64 4,088.0 4,088.0 -0.0%
AvroBytesBench.eoModifyPartner - 984.0 984.0 -0.0%
OrderAvroBench.naiveModifyStreet size=64 20,880.2 20,880.2 -0.0%
PlatedBench.eoUniverseExpr n=64 12,168.0 12,168.0 -0.0%
AvroBytesBench.eoReadPartner - 480.0 480.0 -0.0%
OrderJsoniterBench.naiveReadStreet size=8 3,648.0 3,648.0 +0.0%
OrderAvroBench.naiveReadStreet size=64 8,848.1 8,848.1 -0.0%
PlatedBench.mUniverseJson n=64 73,208.6 73,208.6 -0.0%
PlatedBench.eoTransformExpr n=512 81,825.6 81,825.6 +0.0%
AvroJsonBridgeBench.naiveWideToJson - 4,376.0 4,376.0 -0.0%
AvroJsonBridgeBench.eoClickToAvro - 4,664.0 4,664.0 -0.0%
MultiFocusBench.eoFold_powerEach size=32 920.0 920.0 -0.0%
AvroBytesBench.eoModifyCountry - 928.0 928.0 -0.0%
JsoniterBench.jReadId size=64 72.0 72.0 -0.0%
OrderCirceBench.directStreet size=64 2,728.1 2,728.1 +0.0%
ClickRecordBench.encode_derived - 744.0 744.0 -0.0%
OrderCirceBench.eoNamesIor size=8 11,576.1 11,576.1 -0.0%
OrderAvroBench.naiveModifyStreet size=512 169,059.4 169,059.3 -0.0%
JsoniterBench.cModifyId size=512 1,066,721.5 1,066,721.7 +0.0%
FoldBench.eoFoldMap size=512 7,936.2 7,936.2 -0.0%
OrderCirceBench.directNames size=8 10,688.1 10,688.1 -0.0%
PowerSeriesNestedBench.monocle_nested size=16 15,776.1 15,776.1 -0.0%
PowerSeriesBench.eoModify_powerEach size=256 10,688.4 10,688.4 +0.0%
AvroBytesBench.prunedReadCountry - 1,976.0 1,976.0 -0.0%
OrderAvroBench.naiveModifyNames size=64 27,936.2 27,936.2 -0.0%
AvroDecodeReuseBench.freshDecodeRecord - 3,344.0 3,344.0 -0.0%
AvroJsonBridgeBench.eoWideToAvro - 2,040.0 2,040.0 -0.0%
CompositionBench.reuseLens3 - 72.0 72.0 -0.0%
KyoDiBench.handVarUpdate - 200.0 200.0 -0.0%
PowerSeriesNestedBench.naive_nested size=64 7,512.2 7,512.2 -0.0%
MultiFocusCollectBench.eoCollectList_listSum - 56.0 56.0 -0.0%
OrderCirceBench.directStreet size=8 2,728.0 2,728.0 +0.0%
AvroBytesBench.eoSliceGraftPayload - 1,192.0 1,192.0 -0.0%
AffineFoldBench.eoGetOption_3 - 16.0 16.0 -0.0%
SchemesBench.eoHylo - 295,848.5 295,848.5 +0.0%
PlatedBench.visitorTransformExpr n=64 5,608.0 5,608.0 -0.0%
PlatedBench.visitorUniverseDeep n=512 24,632.7 24,632.7 -0.0%
AvroEncodeRouteBench.handwritten_stream - 240.0 240.0 -0.0%
JsoniterBench.cReadStreet size=8 15,568.0 15,568.0 -0.0%
OptionalBench.eoModify_6 - 208.0 208.0 -0.0%
PowerSeriesNestedBench.naive_nested size=16 2,136.0 2,136.0 -0.0%
AvroBytesBench.naiveReadCountry - 4,256.0 4,256.0 -0.0%
AvroDecodeReuseBench.confluentRecordReaderFresh - 3,696.0 3,696.0 -0.0%
AvroBytesBench.eoReadCountry - 520.0 520.0 -0.0%
AvroJsonBridgeBench.naiveClickToJson - 5,856.0 5,856.0 -0.0%
AvroBytesBench.prunedReadPartner - 1,592.0 1,592.0 -0.0%
AvroVulcanBench.fieldGet_native - 432.0 432.0 -0.0%
PlatedBench.visitorUniverseExpr n=64 3,080.0 3,080.0 -0.0%
AvroVulcanBench.rootGet_bridged - 1,424.0 1,424.0 -0.0%
PowerSeriesBench.monocle_powerEach size=64 14,520.1 14,520.1 -0.0%
PlatedBench.visitorTransformDeep n=512 20,496.5 20,496.5 -0.0%
TraversalBench.eoFoldNested size=64 2,680.0 2,680.0 -0.0%
AvroJsonBridgeBench.naiveClickToAvro - 3,928.0 3,928.0 -0.0%
OrderAvroBench.eoModifyNames size=64 12,616.1 12,616.1 +0.0%
PlatedBench.eoTransformDeep n=64 7,184.0 7,184.0 +0.0%
KyoDiBench.eoVarUpdateFocus - 216.0 216.0 -0.0%
PlatedBench.mTransformExpr n=512 69,585.4 69,585.4 -0.0%
PowerSeriesNestedBench.eoModify_nested size=4 2,264.0 2,264.0 +0.0%
OrderAvroBench.monocleModifyStreet size=64 20,904.2 20,904.2 -0.0%
PlatedBench.visitorTransformDeep n=64 2,576.0 2,576.0 -0.0%
MultiFocusBench.eoModify_multiFocus size=32 8,600.0 8,600.0 +0.0%
KyoDiBench.eoEnvFocus - 320.0 320.0 -0.0%
KyoDiBench.handEnvUse - 312.0 312.0 -0.0%
AvroVulcanBench.decode_native - 48.0 48.0 -0.0%
PowerSeriesPrismBench.eoModify_sparse size=8 496.0 496.0 -0.0%
CompositionBench.reuseLens1 - 40.0 40.0 -0.0%
MultiFocusCollectBench.naive_listSum - 56.0 56.0 -0.0%
TraversalBench.eoModify size=64 4,640.0 4,640.0 +0.0%
ClickRecordBench.encode_derivedThroughPrism - 744.0 744.0 +0.0%
AvroBytesBench.naivePassthroughPayload - 14,088.1 14,088.1 -0.0%
OrderAvroBench.naiveModifyStreet size=8 2,968.0 2,968.0 -0.0%
AvroJsonBridgeBench.eoWideToJson - 1,472.0 1,472.0 -0.0%
OrderAvroBench.naiveReadStreet size=8 1,208.0 1,208.0 +0.0%
MultiFocusBench.naive_listMap size=32 2,088.0 2,088.0 +0.0%
FoldBench.mFoldMap size=64 768.0 768.0 -0.0%
JsoniterBench.cReadId size=8 15,568.0 15,568.0 -0.0%
MultiFocusBench.eoModify_powerEach size=32 3,152.0 3,152.0 -0.0%
OrderAvroBench.monocleModifyNames size=8 5,400.0 5,400.0 +0.0%
OrderAvroBench.eoModifyStreet size=8 328.0 328.0 +0.0%
MultiFocusBench.naive_listMap size=4 296.0 296.0 +0.0%
CapsBench.modifyDeepCap - 176.0 176.0 -0.0%
TraversalBench.mFoldPrices size=64 15,408.1 15,408.1 +0.0%
PowerSeriesBench.naive_powerEach size=16 504.0 504.0 -0.0%
PlatedBench.eoUniverseExpr n=512 98,185.8 98,185.8 +0.0%
PowerSeriesPrismBench.monocle_sparse size=128 27,808.2 27,808.2 -0.0%
FoldBench.eoFoldMap size=64 768.0 768.0 +0.0%
AvroBytesBench.eoGraftPayload - 720.0 720.0 -0.0%
SetterBench.mModify_6 - 288.0 288.0 +0.0%
CompositionBench.reuseLens6 - 120.0 120.0 -0.0%
PowerSeriesPrismBench.eoModify_sparse size=32 1,360.0 1,360.0 +0.0%
AvroDecodeReuseBench.cachedDecodeRecord - 1,224.0 1,224.0 -0.0%
OrderAvroBench.monocleModifyStreet size=8 2,992.0 2,992.0 -0.0%
PowerSeriesBench.monocle_powerEach size=16 3,720.0 3,720.0 -0.0%
SetterBench.mModify_3 - 168.0 168.0 +0.0%
CapsBench.modifyDeepDirect - 152.0 152.0 +0.0%
FoldBench.eoFoldPrices size=512 12,312.4 12,312.4 +0.0%
OrderAvroBench.monocleReadStreet size=8 1,208.0 1,208.0 -0.0%
AvroJsonBridgeBench.naiveWideToAvro - 3,504.0 3,504.0 -0.0%
MultiFocusBench.naive_sumQty size=256 3,840.0 3,840.0 -0.0%
FoldBench.eoFoldPrices size=64 1,560.0 1,560.0 +0.0%
PowerSeriesPrismBench.naive_sparse size=32 416.0 416.0 -0.0%
JsoniterBench.jModifyId size=64 5,328.0 5,328.0 -0.0%
SchemesBench.eoAna - 589,712.7 589,712.8 +0.0%
OrderAvroBench.eoModifyStreet size=64 328.0 328.0 +0.0%
AvroEncodeRouteBench.naive_freshPlumbing - 2,624.0 2,624.0 -0.0%
TraversalBench.mModify size=64 14,408.1 14,408.1 -0.0%
AvroVulcanBench.fieldGet_bridged - 432.0 432.0 -0.0%
AvroVulcanBench.rootGet_native - 600.0 600.0 -0.0%
AvroDecodeReuseBench.confluentRecordReader - 1,560.0 1,560.0 +0.0%
MultiFocusBench.naive_sumQty size=32 256.0 256.0 +0.0%
ReviewBench.naiveBuild_6 - 120.0 120.0 +0.0%
OrderAvroBench.eoReadStreet size=8 88.0 88.0 -0.0%
PlatedBench.visitorUniverseDeep n=64 3,128.0 3,128.0 +0.0%
TraversalBench.mFoldPrices size=8 2,000.0 2,000.0 +0.0%
SchemesBench.drosteHylo - 328,640.4 328,640.4 +0.0%
AvroVulcanBench.decode_bridged - 832.0 832.0 -0.0%
FoldBench.mFoldMap size=512 7,936.2 7,936.2 -0.0%
PlatedBench.eoTransformExpr n=64 10,144.0 10,144.0 +0.0%
SchemesBench.drosteCata - 164,824.3 164,824.2 -0.0%
OrderAvroBench.naiveModifyNames size=8 3,752.0 3,752.0 -0.0%
AvroEncodeRouteBench.eo_encodeToAny - 312.0 312.0 -0.0%
AvroVulcanBench.encode_native - 56.0 56.0 +0.0%
FoldBench.mFoldPrices size=64 1,560.0 1,560.0 -0.0%
MultiFocusBench.naive_listMap size=256 16,424.2 16,424.2 +0.0%
GenericsBench.genPrismModifyHit - 24.0 24.0 -0.0%
MultiFocusBench.eoFold_powerEach size=4 328.0 328.0 -0.0%
CapsBench.modifyCap - 40.0 40.0 -0.0%
JsoniterBench.jReplaceId size=8 960.0 960.0 -0.0%
SetterBench.eoModify_6 - 120.0 120.0 +0.0%
AffineFoldBench.eoGetOption_0_asOptional - 16.0 16.0 -0.0%
LensBench.mModifyDeep - 176.0 176.0 -0.0%
ClickRecordBench.encode_vulcanFull - 28,408.0 28,408.0 -0.0%
OptionalBench.eoReplace_loyalty - 88.0 88.0 +0.0%
OrderAvroBench.monocleReadStreet size=64 8,848.1 8,848.1 -0.0%
SchemesBench.handAna - 163,816.2 163,816.2 +0.0%
OrderCirceBench.naiveStreet size=8 17,040.1 17,040.1 +0.0%
OptionalBench.mModify_0 - 112.0 112.0 -0.0%
PowerSeriesBench.naive_powerEach size=4 168.0 168.0 -0.0%
LensBench.eoModifyDeep - 152.0 152.0 -0.0%
MultiFocusBench.eoModify_multiFocus size=256 76,112.7 76,112.7 -0.0%
PowerSeriesPrismBench.naive_sparse size=8 128.0 128.0 +0.0%
GenericsBench.handPrismModifyHit - 24.0 24.0 -0.0%
ReviewBench.naiveBuild_3 - 72.0 72.0 -0.0%
IsoBench.eoReverseGet - 32.0 32.0 +0.0%
OptionalBench.mModify_loyalty - 112.0 112.0 +0.0%
GenericsBench.rawPrismModifyHit - 24.0 24.0 +0.0%
GenericsBench.rawPrismGetHit - 16.0 16.0 -0.0%
PowerSeriesNestedBench.naive_nested size=4 792.0 792.0 -0.0%
MultiFocusCollectBench.naive_constSum - 16.0 16.0 -0.0%
GenericsBench.genPrismGetHit - 16.0 16.0 -0.0%
ReviewBench.eoReverseGet_0 - 24.0 24.0 +0.0%
MultiFocusBench.eoModify_powerEach size=4 800.0 800.0 +0.0%
JsoniterBench.jModifyId size=8 992.0 992.0 -0.0%
SchemesBench.drosteAna - 327,632.4 327,632.4 -0.0%
SetterBench.mModify_0 - 24.0 24.0 +0.0%
ClickRecordBench.encode_hand - 768.0 768.0 +0.0%
SchemesBench.eoCata - 197,568.4 197,568.4 +0.0%
PrismBench.eoRightReverseGet - 16.0 16.0 -0.0%
OrderCirceBench.naiveNames size=8 17,808.1 17,808.1 +0.0%
LensBench.eoReplace - 40.0 40.0 -0.0%
PlatedBench.mTransformExpr n=64 11,728.0 11,728.0 -0.0%
CompositionBench.buildLens1 - 72.0 72.0 +0.0%
TraversalBench.eoFoldPrices size=8 216.0 216.0 +0.0%
OptionalBench.mModify_3 - 304.0 304.0 -0.0%
KyoDiBench.handMapDrillModify - 216.0 216.0 +0.0%
SetterBench.mModify_orderId - 40.0 40.0 +0.0%
JsoniterBench.jReplaceId size=64 5,296.0 5,296.0 -0.0%
PowerSeriesBench.eoModify_powerEach size=16 1,088.0 1,088.0 +0.0%
GenericsBench.handPrismGetHit - 16.0 16.0 -0.0%
AvroEncodeRouteBench.eo_encodeValue - 568.0 568.0 +0.0%
CompositionBench.buildLens3 - 184.0 184.0 +0.0%
OrderJsoniterBench.eoModifyStreet size=8 1,072.0 1,072.0 -0.0%
PrismBench.mReverseGet - 16.0 16.0 +0.0%
ClickRecordBench.encode_positional - 23,912.0 23,912.0 -0.0%
CompositionBench.reuseLensOptional3 - 160.0 160.0 -0.0%
CompositionBench.buildLens6 - 352.0 352.0 -0.0%
OptionalBench.eoReplace_0 - 40.0 40.0 +0.0%
OptionalBench.eoModify_3 - 160.0 160.0 -0.0%
ReviewBench.eoReverseGet_3 - 72.0 72.0 +0.0%
ReviewBench.eoReverseGet_6 - 120.0 120.0 -0.0%
ZioDiBench.handDrillGet - 120.0 120.0 -0.0%
LensBench.mReplace - 40.0 40.0 -0.0%
MultiFocusCollectBench.naive_tuple3Rewrite - 96.0 96.0 +0.0%
OptionalBench.eoModify_loyalty - 112.0 112.0 -0.0%
ZioDiBench.eoDrillModify - 472.0 472.0 +0.0%
PrismBench.eoGetRightPresent - 16.0 16.0 -0.0%
TraversalBench.eoModify size=8 608.0 608.0 +0.0%
GenericsBench.rawLensModify - 24.0 24.0 -0.0%
SetterBench.eoModify_3 - 72.0 72.0 +0.0%
PrismBench.mRightReverseGet - 16.0 16.0 +0.0%
PowerSeriesPrismBench.monocle_sparse size=32 7,040.0 7,040.0 +0.0%
PrismBench.eoReverseGet - 16.0 16.0 +0.0%
FoldBench.mFoldPrices size=8 216.0 216.0 +0.0%
GenericsBench.handLensModify - 24.0 24.0 -0.0%
IsoBench.eoGet - 32.0 32.0 -0.0%
MultiFocusCollectBench.eoCollectMap_zipMean - 880.0 880.0 +0.0%
LensBench.mModify - 40.0 40.0 +0.0%
TraversalBench.mModify size=8 1,896.0 1,896.0 +0.0%
KyoDiBench.eoMapDrillModify - 216.0 216.0 -0.0%
LensBench.eoModify - 40.0 40.0 -0.0%
OptionalBench.eoModify_0 - 112.0 112.0 -0.0%
AvroBytesBench.naiveModifyCountry - 7,616.0 7,616.0 -0.0%
TraversalBench.eoFoldPrices size=64 1,560.0 1,560.0 +0.0%
ZioDiBench.eoServiceReplace - 400.0 400.0 -0.0%
OpticBuildBench.build - 184.0 184.0 -0.0%
SetterBench.eoModify_0 - 24.0 24.0 -0.0%
SetterBench.eoModify_orderId - 40.0 40.0 -0.0%
OptionalBench.mReplace_0 - 40.0 40.0 -0.0%
IsoBench.mReverseGet - 32.0 32.0 -0.0%
GenericsBench.genLensModify - 24.0 24.0 +0.0%
OptionalBench.mModify_6 - 496.0 496.0 -0.0%
ZioDiBench.handServiceReplace - 520.0 520.0 -0.0%
CapsBench.modifyDerivedHeld - 40.0 40.0 +0.0%
MultiFocusCollectBench.naive_zipMeanBroadcast - 1,176.0 1,176.0 +0.0%
PowerSeriesBench.eoModify_powerEach size=4 608.0 608.0 +0.0%
AvroVulcanBench.decode_vulcanRaw - 832.0 832.0 -0.0%
ZioDiBench.handServiceGet - 120.0 120.0 -0.0%
ReviewBench.naiveBuild_0 - 24.0 24.0 +0.0%
CompositionBench.reuseLeaf - 24.0 24.0 -0.0%
CapsBench.modifyDerivedPerCall - 40.0 40.0 -0.0%
CompositionBench.buildLensOptional3 - 184.0 184.0 -0.0%
ZioDiBench.handDrillModify - 592.0 592.0 -0.0%
AvroBytesBench.naiveModifyPartner - 8,696.0 8,696.0 -0.0%
IsoBench.mGet - 32.0 32.0 +0.0%
OptionalBench.mReplace_loyalty - 88.0 88.0 -0.0%
AvroBytesBench.naiveReadPartner - 5,424.0 5,424.0 +0.0%
CapsBench.modifyDirect - 40.0 40.0 -0.0%
OrderCirceBench.monocleStreet size=8 17,048.1 17,048.1 +0.0%
MultiFocusBench.eoModify_multiFocus size=4 1,320.0 1,320.0 -0.0%
PrismBench.mGetRightPresent - 16.0 16.0 +0.0%
MultiFocusCollectBench.naive_tuple6Rewrite - 184.0 184.0 +0.0%
FoldBench.eoFoldPrices size=8 216.0 216.0 -0.0%
Timing (ns/op) — directional only, same-VM but shared runner
Benchmark params base head Δ
MultiFocusCollectBench.eoModify_multiFocusTuple3 - 19.0 13.6 -28.5%
GetterBench.mGet_6 - 17.5 21.9 +25.0%
TraversalBench.eoFoldNested size=8 53.2 65.3 +22.8%
PlatedBench.visitorUniverseJson n=4096 143,672.3 111,258.6 -22.6%
JsoniterBench.jReadId size=512 32.2 26.0 -19.2%
MultiFocusBench.eoModify_powerEach size=256 5,808.8 6,831.6 +17.6%
GetterBench.mGet_orderId - 0.5 0.4 -14.9%
JsoniterBench.jReadId size=8 27.3 30.9 +13.3%
PowerSeriesNestedBench.monocle_nested size=4 1,179.8 1,040.9 -11.8%
CapsBench.foldMapDerivedPerCall - 19.3 17.1 -11.4%
CapsBench.getDeepDirect - 1.2 1.0 -10.9%
OrderJsoniterBench.monocleReadStreet size=8 1,304.0 1,441.6 +10.6%
CapsBench.getDerivedHeld - 1.9 1.7 -10.2%
OrderJsoniterBench.monocleReadStreet size=64 8,066.9 8,891.3 +10.2%
CapsBench.getCap - 1.0 0.9 -10.1%
CapsBench.getDirect - 0.9 0.8 -10.0%
AvroJsonBridgeBench.naiveWideToJson - 1,614.3 1,456.7 -9.8%
AffineFoldBench.eoGetOption_loyalty - 0.9 0.8 -9.7%
OrderJsoniterBench.monocleSumPrices size=8 1,819.5 1,988.5 +9.3%
CapsBench.foldMapDerivedHeld - 20.2 18.3 -9.3%
AffineFoldBench.mGetOption_0_empty - 0.8 0.7 -9.3%
OrderJsoniterBench.nativeReadStreet size=8 679.7 741.9 +9.2%
OrderJsoniterBench.monocleModifyStreet size=8 2,545.8 2,778.7 +9.1%
GetterBench.mGet_3 - 6.3 5.7 -8.6%
CapsBench.foldMapDirect - 18.5 16.9 -8.6%
CapsBench.getDerivedPerCall - 1.3 1.2 -8.4%
OrderJsoniterBench.monocleModifyStreet size=512 121,430.3 131,564.0 +8.3%
AvroVulcanBench.fieldGet_native - 85.9 78.8 -8.3%
GenericsBench.genPrismGetMiss - 1.0 0.9 -8.2%
AvroJsonBridgeBench.eoClickToJson - 2,440.4 2,247.2 -7.9%
OrderJsoniterBench.nativeSumPrices size=64 5,727.2 6,172.9 +7.8%
JsoniterBench.jMiss size=512 164.6 152.0 -7.6%
CapsBench.foldMapCap - 18.5 17.1 -7.6%
SchemesBench.handHylo - 11,196.9 12,044.1 +7.6%
GenericsBench.genPrismModifyMiss - 1.0 0.9 -7.5%
MultiFocusCollectBench.eoModify_multiFocusTuple6 - 33.6 36.2 +7.5%
SchemesBench.eoHylo - 71,282.0 76,625.5 +7.5%
PlatedBench.visitorUniverseJson n=512 19,186.7 20,615.5 +7.4%
AffineFoldBench.mGetOption_0 - 0.8 0.7 -7.4%
AffineFoldBench.eoGetOption_0_empty - 0.8 0.8 +7.4%
JsoniterBench.jMiss size=8 164.1 152.3 -7.2%
JsoniterBench.jMiss size=64 164.3 152.7 -7.1%
LensBench.eoGet - 0.9 0.8 -7.0%
OrderJsoniterBench.nativeSumPrices size=512 48,155.3 51,524.4 +7.0%
AvroVulcanBench.rootGet_bridged - 303.3 282.4 -6.9%
AffineFoldBench.eoGetOption_0 - 0.8 0.9 +6.9%
OrderJsoniterBench.monocleModifyStreet size=64 14,648.5 15,638.0 +6.8%
OrderCirceBench.directNames size=512 178,892.7 166,906.3 -6.7%
LensBench.mGet - 1.0 0.9 -6.6%
KyoDiBench.handMapGet - 1.6 1.5 -6.5%
JsoniterBench.jSumPrices size=64 9,463.2 8,859.4 -6.4%
AvroJsonBridgeBench.eoClickToAvro - 2,569.8 2,405.9 -6.4%
AvroJsonBridgeBench.eoWideToAvro - 698.7 654.3 -6.4%
OrderJsoniterBench.naiveSumPrices size=64 8,736.4 9,291.0 +6.3%
KyoDiBench.handVarUpdate - 66.1 61.9 -6.3%
GenericsBench.genLensGet - 0.9 0.8 -6.3%
AffineFoldBench.mGetOption_loyalty_empty - 0.9 0.8 -6.2%
JsoniterBench.cReplaceId size=8 6,919.4 6,489.3 -6.2%
OrderJsoniterBench.naiveSumPrices size=512 69,610.7 73,918.6 +6.2%
OrderAvroBench.eoModifyNames size=8 472.3 501.0 +6.1%
OrderJsoniterBench.nativeReadStreet size=64 3,763.2 3,991.8 +6.1%
OrderJsoniterBench.naiveReadStreet size=512 65,021.9 68,953.7 +6.0%
OrderCirceBench.hcursorNames size=8 3,120.3 2,933.9 -6.0%
OrderJsoniterBench.naiveModifyStreet size=64 14,593.0 15,462.9 +6.0%
JsoniterBench.cReadId size=64 21,234.6 19,978.6 -5.9%
JsoniterBench.cReadStreet size=8 3,376.3 3,180.3 -5.8%
GetterBench.eoGet_3 - 11.4 10.8 -5.8%
OrderJsoniterBench.naiveModifyStreet size=8 2,555.6 2,700.6 +5.7%
AffineFoldBench.eoGetOption_6 - 21.3 20.1 -5.6%
PowerSeriesPrismBench.eoModify_sparse size=128 1,273.9 1,205.0 -5.4%
MultiFocusCollectBench.eoCollectMap_constSum - 1.6 1.5 -5.4%
PrismBench.eoGetOptionAbsent - 0.8 0.7 -5.3%
ClickRecordBench.encode_derived - 443.8 420.2 -5.3%
AvroBytesBench.eoModifyPartner - 313.0 296.4 -5.3%
GetterBench.mGet_0 - 0.4 0.4 -5.3%
JsoniterBench.jReadStreet size=8 168.7 159.8 -5.3%
JsoniterBench.jSumPrices size=512 75,672.1 71,748.7 -5.2%
SchemesBench.handCata - 13,456.2 14,149.5 +5.2%
OrderJsoniterBench.nativeSumPrices size=8 867.5 911.8 +5.1%
GetterBench.eoGet_0 - 0.8 0.7 -5.1%
AvroBytesBench.eoModifyCountry - 257.0 244.0 -5.1%
JsoniterBench.cReadId size=512 167,966.6 159,579.0 -5.0%
CapsBench.modifyDeepCap - 29.4 27.9 -5.0%
JsoniterBench.cReplaceId size=64 40,386.3 38,407.9 -4.9%
OptionalBench.eoModify_0_empty - 1.3 1.2 -4.9%
CompositionBench.reuseLens3 - 32.3 30.8 -4.9%
JsoniterBench.jReadStreet size=64 167.8 159.7 -4.9%
GenericsBench.handPrismModifyMiss - 0.9 0.9 -4.8%
MultiFocusBench.naive_listMap size=4 45.2 47.4 +4.8%
OrderCirceBench.eoStreet size=512 848.0 807.1 -4.8%
JsoniterBench.cReadStreet size=512 168,415.1 160,386.5 -4.8%
FoldBench.mFoldPrices size=512 2,529.8 2,412.2 -4.6%
GenericsBench.handLensGet - 0.9 0.8 -4.6%
AvroBytesBench.eoReadPartner - 160.9 153.5 -4.6%
PlatedBench.eoUniverseJson n=4096 197,767.9 188,699.8 -4.6%
PowerSeriesBench.monocle_powerEach size=4 178.9 170.8 -4.5%
OrderCirceBench.eoStreet size=8 834.2 797.1 -4.4%
OrderJsoniterBench.naiveSumPrices size=8 1,378.1 1,439.3 +4.4%
OrderJsoniterBench.monocleReadStreet size=512 64,806.1 67,679.3 +4.4%
MultiFocusBench.eoFold_powerEach size=32 305.3 291.8 -4.4%
JsoniterBench.jSumPrices size=8 1,248.6 1,194.5 -4.3%
AvroVulcanBench.decode_native - 12.7 12.2 -4.3%
FoldBench.mFoldMap size=8 18.2 17.4 -4.3%
KyoDiBench.eoMapGet - 2.0 2.0 -4.3%
AffineFoldBench.mGetOption_3 - 6.9 6.6 -4.3%
SetterBench.mModify_3 - 27.8 28.9 +4.3%
OrderJsoniterBench.naiveModifyStreet size=512 121,020.7 126,175.9 +4.3%
PrismBench.eoGetRightAbsent - 0.9 0.8 -4.2%
AvroDecodeReuseBench.freshDecodeRecord - 1,217.3 1,165.8 -4.2%
KyoDiBench.eoEnvFocus - 89.4 85.7 -4.2%
AvroBytesBench.eoSliceGraftPayload - 230.7 221.0 -4.2%
AvroJsonBridgeBench.naiveClickToAvro - 1,406.4 1,348.6 -4.1%
TraversalBench.mFoldPrices size=512 28,418.7 29,571.5 +4.1%
PowerSeriesNestedBench.monocle_nested size=64 9,979.0 9,577.0 -4.0%
OrderJsoniterBench.monocleSumPrices size=64 11,789.5 12,263.9 +4.0%
JsoniterBench.jModifyId size=512 6,038.3 5,796.4 -4.0%
MultiFocusBench.naive_listMap size=1024 10,328.2 10,741.1 +4.0%
JsoniterBench.cSumPrices size=64 33,842.4 32,494.0 -4.0%
OptionalBench.eoModify_loyalty_empty - 1.3 1.2 -4.0%
MultiFocusCollectBench.eoCollectList_listSum - 27.2 26.2 -3.9%
AvroJsonBridgeBench.naiveClickToJson - 2,557.4 2,457.2 -3.9%
KyoDiBench.handEnvUse - 86.8 83.4 -3.9%
KyoDiBench.eoVarUpdateFocus - 72.5 69.7 -3.9%
ReviewBench.naiveBuild_6 - 16.9 17.5 +3.8%
PowerSeriesNestedBench.monocle_nested size=256 82,359.9 79,259.9 -3.8%
PowerSeriesPrismBench.eoModify_sparse size=8 101.3 97.5 -3.7%
OrderAvroBench.monocleModifyNames size=512 79,720.1 76,803.9 -3.7%
PlatedBench.visitorTransformExpr n=64 1,022.2 984.9 -3.7%
JsoniterBench.cSumPrices size=512 274,477.4 264,489.9 -3.6%
PowerSeriesBench.eoModify_powerEach size=64 710.3 684.6 -3.6%
OrderAvroBench.monocleReadStreet size=512 19,015.7 18,338.8 -3.6%
CapsBench.modifyDeepDirect - 28.1 29.1 +3.6%
CompositionBench.reuseLens1 - 11.4 11.0 -3.5%
OptionalBench.eoModify_6 - 99.1 95.6 -3.5%
SetterBench.mModify_6 - 52.5 54.3 +3.5%
OrderAvroBench.naiveModifyStreet size=64 4,893.1 4,723.2 -3.5%
JsoniterBench.jReadStreet size=512 165.3 159.5 -3.5%
MultiFocusBench.eoModify_multiFocus size=32 1,548.2 1,601.8 +3.5%
OrderCirceBench.eoNamesIor size=8 3,409.8 3,292.5 -3.4%
AffineFoldBench.mGetOption_loyalty - 0.9 0.8 -3.4%
OrderJsoniterBench.naiveReadStreet size=8 1,307.1 1,351.7 +3.4%
PowerSeriesPrismBench.eoModify_sparse size=512 5,480.3 5,294.1 -3.4%
OrderJsoniterBench.eoSumPrices size=8 1,277.9 1,234.5 -3.4%
OrderCirceBench.hcursorStreet size=512 907.4 876.9 -3.4%
PlatedBench.visitorTransformDeep n=4096 43,521.8 42,063.9 -3.3%
MultiFocusBench.naive_sumQty size=1024 5,225.8 5,051.5 -3.3%
PowerSeriesPrismBench.monocle_sparse size=512 31,635.4 30,580.9 -3.3%
GetterBench.eoGet_6 - 21.8 21.1 -3.3%
PlatedBench.visitorUniverseJson n=64 1,881.4 1,818.9 -3.3%
SchemesBench.eoAna - 104,700.1 108,167.8 +3.3%
PowerSeriesPrismBench.eoModify_sparse size=32 305.6 295.5 -3.3%
OrderCirceBench.hcursorNames size=512 170,472.1 165,014.6 -3.2%
AffineFoldBench.eoGetOption_loyalty_empty - 0.9 0.8 -3.1%
AvroVulcanBench.encode_bridged - 199.8 193.6 -3.1%
AvroVulcanBench.fieldGet_bridged - 81.6 79.1 -3.1%
PlatedBench.visitorUniverseExpr n=64 737.4 714.5 -3.1%
PlatedBench.visitorUniverseExpr n=512 6,316.3 6,121.3 -3.1%
GenericsBench.rawLensGet - 0.6 0.6 -3.1%
JsoniterBench.cModifyId size=512 317,581.1 307,846.2 -3.1%
AvroJsonBridgeBench.eoWideToJson - 515.4 499.7 -3.0%
SchemesBench.drosteHylo - 55,072.4 56,738.8 +3.0%
MultiFocusBench.naive_listMap size=32 319.5 329.2 +3.0%
AvroDecodeReuseBench.confluentRecordReaderFresh - 1,298.3 1,259.1 -3.0%
OrderCirceBench.naiveStreet size=64 18,253.7 18,789.2 +2.9%
AffineFoldBench.eoGetOption_3 - 10.3 10.0 -2.9%
JsoniterBench.cReadId size=8 3,242.4 3,148.9 -2.9%
PowerSeriesNestedBench.monocle_nested size=16 2,750.5 2,671.2 -2.9%
OrderAvroBench.eoReadStreet size=64 27.7 26.9 -2.9%
OrderAvroBench.naiveReadStreet size=64 2,389.6 2,321.3 -2.9%
AvroVulcanBench.decode_bridged - 155.2 150.8 -2.8%
PlatedBench.eoTransformDeep n=64 1,290.8 1,327.2 +2.8%
OrderJsoniterBench.eoModifyStreet size=512 5,983.8 6,150.8 +2.8%
PlatedBench.visitorTransformExpr n=512 7,769.5 7,554.4 -2.8%
OptionalBench.mModify_0_empty - 1.3 1.4 +2.8%
GenericsBench.genPrismModifyHit - 3.5 3.4 -2.7%
JsoniterBench.cModifyId size=64 40,464.7 39,359.0 -2.7%
ZioDiBench.eoServiceGet - 4.6 4.5 -2.7%
OrderCirceBench.eoStreetIor size=64 837.1 814.4 -2.7%
CapsBench.modifyCap - 5.7 5.5 -2.7%
AvroEncodeRouteBench.handwritten_stream - 153.6 149.5 -2.7%
JsoniterBench.cSumPrices size=8 5,241.9 5,102.5 -2.7%
GetterBench.eoGet_orderId - 0.7 0.7 -2.6%
AffineFoldBench.eoGetOption_0_asAffineFold - 0.8 0.8 -2.6%
CapsBench.getDeepCap - 1.3 1.3 -2.6%
OrderCirceBench.eoStreetIor size=8 806.4 827.7 +2.6%
OrderAvroBench.naiveModifyStreet size=8 753.3 733.8 -2.6%
PowerSeriesNestedBench.naive_nested size=1024 21,518.5 20,961.4 -2.6%
OrderJsoniterBench.eoReadStreet size=512 171.3 166.8 -2.6%
PlatedBench.mUniverseExpr n=64 28,714.4 27,977.3 -2.6%
OptionalBench.eoReplace_loyalty - 12.1 12.4 +2.6%
AvroBytesBench.eoReadCountry - 139.5 135.9 -2.5%
PlatedBench.eoTransformDeep n=512 12,511.7 12,827.4 +2.5%
MultiFocusCollectBench.naive_listSum - 24.6 24.0 -2.5%
OrderAvroBench.naiveReadStreet size=512 18,775.1 18,315.7 -2.4%
AvroVulcanBench.rootGet_native - 129.1 126.0 -2.4%
OrderCirceBench.monocleStreet size=64 18,634.1 18,187.8 -2.4%
PlatedBench.eoUniverseJson n=512 22,519.1 23,056.8 +2.4%
PowerSeriesPrismBench.naive_sparse size=128 306.0 298.8 -2.4%
OrderCirceBench.directNames size=64 22,229.2 22,753.8 +2.4%
OrderCirceBench.hcursorStreet size=64 902.3 881.0 -2.4%
AffineFoldBench.eoGetOption_0_asOptional - 2.6 2.6 -2.3%
PowerSeriesNestedBench.eoModify_nested size=256 15,963.8 16,332.7 +2.3%
SetterBench.eoModify_6 - 21.5 22.0 +2.3%
AvroEncodeRouteBench.naive_freshPlumbing - 753.3 736.3 -2.3%
AvroEncodeRouteBench.eo_encodeToAny - 52.1 50.9 -2.3%
OrderAvroBench.monocleModifyNames size=8 1,183.5 1,210.2 +2.3%
AvroJsonBridgeBench.naiveWideToAvro - 1,043.3 1,019.8 -2.3%
PlatedBench.visitorTransformDeep n=64 520.0 508.3 -2.3%
OrderJsoniterBench.eoReadStreet size=64 167.1 163.3 -2.2%
AvroBytesBench.prunedReadCountry - 855.1 836.1 -2.2%
LensBench.mModifyDeep - 28.5 27.9 -2.2%
OrderAvroBench.naiveReadStreet size=8 356.5 364.4 +2.2%
OrderCirceBench.directNames size=8 3,072.0 3,004.4 -2.2%
OrderAvroBench.naiveModifyNames size=64 6,058.6 5,925.8 -2.2%
PowerSeriesBench.monocle_powerEach size=256 19,461.2 19,037.5 -2.2%
OrderJsoniterBench.eoModifyStreet size=64 847.1 865.4 +2.2%
PlatedBench.eoUniverseExpr n=4096 140,585.7 143,605.6 +2.1%
PlatedBench.eoTransformDeep n=4096 114,922.2 117,379.6 +2.1%
AvroBytesBench.naiveReadCountry - 1,427.0 1,396.5 -2.1%
OrderCirceBench.directStreet size=8 790.6 807.3 +2.1%
TraversalBench.mModify size=512 31,993.9 32,669.6 +2.1%
PlatedBench.eoUniverseDeep n=64 2,009.9 2,051.5 +2.1%
PlatedBench.mUniverseJson n=64 32,489.1 31,816.1 -2.1%
TraversalBench.mFoldPrices size=8 374.1 381.8 +2.1%
SchemesBench.drosteCata - 35,509.2 34,783.2 -2.0%
PowerSeriesBench.monocle_powerEach size=64 2,360.0 2,312.0 -2.0%
AvroVulcanBench.encode_native - 10.5 10.7 +2.0%
PowerSeriesBench.naive_powerEach size=16 91.8 90.0 -2.0%
PowerSeriesNestedBench.eoModify_nested size=4 556.7 567.8 +2.0%
PlatedBench.eoUniverseDeep n=512 17,310.7 17,656.0 +2.0%
OrderCirceBench.eoNamesIor size=64 24,916.8 24,423.4 -2.0%
PowerSeriesNestedBench.eoModify_nested size=64 4,127.4 4,045.8 -2.0%
SchemesBench.handAna - 30,105.0 30,696.7 +2.0%
TraversalBench.eoFoldPrices size=512 2,073.2 2,113.9 +2.0%
ClickRecordBench.encode_vulcanFull - 5,553.3 5,444.6 -2.0%
OrderJsoniterBench.monocleSumPrices size=512 302,581.8 308,481.6 +1.9%
OrderJsoniterBench.naiveReadStreet size=64 8,366.6 8,529.6 +1.9%
PowerSeriesBench.monocle_powerEach size=16 634.6 622.3 -1.9%
AvroDecodeReuseBench.confluentRecordReader - 329.4 335.7 +1.9%
ReviewBench.eoReverseGet_0 - 3.6 3.6 +1.9%
OrderJsoniterBench.nativeReadStreet size=512 29,591.0 30,148.0 +1.9%
PlatedBench.mTransformExpr n=4096 145,573.6 142,842.8 -1.9%
AvroBytesBench.eoGraftPayload - 119.9 117.7 -1.9%
PlatedBench.visitorUniverseDeep n=4096 57,936.7 56,865.1 -1.8%
JsoniterBench.jReadId size=64 32.0 31.4 -1.8%
PowerSeriesNestedBench.naive_nested size=256 5,333.3 5,235.4 -1.8%
OrderAvroBench.eoModifyStreet size=8 94.0 95.8 +1.8%
PowerSeriesNestedBench.eoModify_nested size=1024 56,027.2 55,019.1 -1.8%
MultiFocusBench.eoModify_powerEach size=1024 31,694.8 31,124.7 -1.8%
AvroDecodeReuseBench.cachedDecodeRecord - 301.7 296.3 -1.8%
OrderCirceBench.naiveNames size=64 19,963.1 19,606.7 -1.8%
GenericsBench.handPrismModifyHit - 3.4 3.4 -1.8%
AvroBytesBench.prunedReadPartner - 586.0 575.6 -1.8%
LensBench.eoModifyDeep - 28.2 27.7 -1.8%
ReviewBench.naiveBuild_3 - 10.4 10.2 -1.7%
PlatedBench.mUniverseExpr n=4096 4,625,677.4 4,706,080.7 +1.7%
PowerSeriesBench.eoModify_powerEach size=1024 11,541.1 11,341.0 -1.7%
IsoBench.eoReverseGet - 4.5 4.6 +1.7%
MultiFocusBench.eoFold_powerEach size=4 61.4 60.3 -1.7%
JsoniterBench.cReadStreet size=64 20,936.2 20,576.2 -1.7%
GenericsBench.genPrismGetHit - 2.5 2.4 -1.7%
OptionalBench.mModify_0 - 19.3 19.0 -1.7%
ClickRecordBench.encode_derivedThroughPrism - 416.7 423.7 +1.7%
OrderAvroBench.eoModifyStreet size=512 95.3 93.7 -1.7%
OrderCirceBench.directStreet size=512 809.9 823.3 +1.7%
MultiFocusBench.eoFold_powerEach size=256 2,901.0 2,853.8 -1.6%
OrderAvroBench.monocleModifyStreet size=8 757.4 745.1 -1.6%
OrderAvroBench.naiveModifyNames size=512 47,456.9 46,694.5 -1.6%
PowerSeriesPrismBench.naive_sparse size=2048 4,837.1 4,761.1 -1.6%
JsoniterBench.jReplaceId size=8 154.9 152.5 -1.6%
TraversalBench.eoModify size=64 872.7 886.3 +1.6%
TraversalBench.eoFoldNested size=64 591.3 582.2 -1.5%
TraversalBench.mFoldPrices size=64 2,454.1 2,490.0 +1.5%
PlatedBench.eoUniverseExpr n=64 1,974.3 2,002.9 +1.5%
PlatedBench.eoTransformExpr n=512 14,759.1 14,971.8 +1.4%
PowerSeriesNestedBench.naive_nested size=16 372.2 366.9 -1.4%
MultiFocusCollectBench.naive_constSum - 2.4 2.4 -1.4%
OrderCirceBench.naiveNames size=512 155,477.4 157,686.9 +1.4%
OptionalBench.eoReplace_0 - 5.7 5.8 +1.4%
TraversalBench.eoModify size=512 7,653.7 7,761.5 +1.4%
OrderAvroBench.monocleReadStreet size=8 361.9 356.8 -1.4%
FoldBench.mFoldMap size=64 147.6 145.5 -1.4%
GenericsBench.rawPrismModifyHit - 3.4 3.5 +1.4%
PlatedBench.mUniverseJson n=512 355,898.5 351,012.2 -1.4%
PlatedBench.eoTransformExpr n=4096 119,735.6 121,356.3 +1.4%
MultiFocusBench.eoModify_powerEach size=32 828.1 816.9 -1.3%
ZioDiBench.eoDrillGet - 8.2 8.1 -1.3%
MultiFocusBench.naive_sumQty size=4 6.0 6.1 +1.3%
OrderCirceBench.hcursorNames size=64 23,203.3 22,894.9 -1.3%
PlatedBench.visitorTransformExpr n=4096 65,226.2 64,365.1 -1.3%
AvroBytesBench.naivePassthroughPayload - 4,534.0 4,474.3 -1.3%
CompositionBench.reuseLens6 - 85.7 84.7 -1.3%
PowerSeriesBench.eoModify_powerEach size=4096 46,811.4 46,228.5 -1.2%
OrderAvroBench.monocleModifyStreet size=64 4,831.2 4,771.8 -1.2%
SetterBench.mModify_0 - 3.5 3.6 +1.2%
OrderAvroBench.naiveModifyNames size=8 908.7 897.5 -1.2%
FoldBench.eoFoldPrices size=64 219.9 222.6 +1.2%
OrderCirceBench.naiveStreet size=512 145,463.6 147,215.4 +1.2%
OrderAvroBench.monocleModifyNames size=64 8,178.2 8,080.2 -1.2%
OrderJsoniterBench.eoReadStreet size=8 164.2 162.2 -1.2%
JsoniterBench.cReplaceId size=512 314,860.1 311,108.0 -1.2%
PlatedBench.eoTransformExpr n=64 1,836.9 1,858.7 +1.2%
JsoniterBench.jModifyId size=64 713.7 705.3 -1.2%
PowerSeriesPrismBench.naive_sparse size=32 78.8 77.9 -1.2%
GenericsBench.rawPrismGetHit - 2.7 2.7 -1.2%
MultiFocusBench.eoModify_powerEach size=4 138.6 140.2 +1.2%
MultiFocusBench.naive_sumQty size=32 57.7 58.4 +1.2%
OpticBuildBench.buildAndUse - 861.7 851.8 -1.1%
OptionalBench.mModify_loyalty - 17.4 17.6 +1.1%
PlatedBench.eoUniverseJson n=64 2,527.4 2,555.8 +1.1%
FoldBench.eoFoldMap size=64 146.6 148.3 +1.1%
LensBench.eoReplace - 5.6 5.6 -1.1%
OrderAvroBench.eoReadStreet size=8 27.4 27.1 -1.1%
SchemesBench.drosteAna - 56,235.1 55,619.7 -1.1%
CompositionBench.buildLens1 - 10.2 10.3 +1.1%
PowerSeriesPrismBench.naive_sparse size=512 1,277.8 1,264.0 -1.1%
PowerSeriesBench.naive_powerEach size=4 27.5 27.2 -1.1%
PowerSeriesBench.monocle_powerEach size=4096 187,387.4 185,373.8 -1.1%
JsoniterBench.jModifyId size=8 153.6 152.0 -1.1%
OrderCirceBench.eoStreet size=64 836.9 845.6 +1.0%
TraversalBench.eoFoldNested size=512 4,966.5 4,914.9 -1.0%
PrismBench.eoGetOptionPresent - 0.8 0.7 -1.0%
PlatedBench.mUniverseJson n=4096 4,987,299.2 5,038,420.8 +1.0%
FoldBench.eoFoldMap size=8 18.2 18.3 +1.0%
TraversalBench.eoFoldPrices size=8 30.3 30.6 +1.0%
OrderAvroBench.eoReadStreet size=512 27.0 27.3 +1.0%
PowerSeriesPrismBench.eoModify_sparse size=2048 21,461.6 21,676.1 +1.0%
TraversalBench.mModify size=64 2,288.0 2,265.7 -1.0%
PowerSeriesNestedBench.monocle_nested size=1024 223,847.9 221,691.5 -1.0%
PrismBench.mGetOptionAbsent - 0.9 0.9 -1.0%
ReviewBench.eoReverseGet_6 - 25.2 25.0 -1.0%
PowerSeriesBench.naive_powerEach size=256 1,330.0 1,342.8 +1.0%
MultiFocusBench.eoModify_multiFocus size=1024 58,232.2 58,767.3 +0.9%
OrderCirceBench.eoNames size=8 3,221.4 3,191.9 -0.9%
OrderCirceBench.monocleStreet size=512 148,192.0 146,834.2 -0.9%
PlatedBench.visitorUniverseDeep n=64 708.0 714.3 +0.9%
PowerSeriesBench.eoModify_powerEach size=16 190.0 191.7 +0.9%
GenericsBench.handPrismGetHit - 2.5 2.4 -0.9%
OrderCirceBench.eoNames size=512 176,677.9 175,165.3 -0.9%
PrismBench.eoRightReverseGet - 2.6 2.6 -0.9%
FoldBench.mFoldPrices size=64 222.5 220.6 -0.8%
SetterBench.mModify_orderId - 5.4 5.5 +0.8%
PrismBench.eoGetRightPresent - 2.6 2.6 -0.8%
OrderAvroBench.eoModifyNames size=512 27,410.3 27,181.4 -0.8%
PrismBench.mReverseGet - 2.5 2.5 +0.8%
OpticBuildBench.build - 40.1 39.7 -0.8%
JsoniterBench.jReplaceId size=512 5,862.8 5,909.9 +0.8%
CompositionBench.buildLens6 - 52.8 52.4 -0.8%
PowerSeriesPrismBench.naive_sparse size=8 22.1 22.3 +0.8%
ClickRecordBench.encode_hand - 120.6 121.5 +0.8%
PowerSeriesNestedBench.naive_nested size=64 1,334.3 1,324.3 -0.8%
JsoniterBench.cModifyId size=8 6,788.9 6,737.9 -0.8%
MultiFocusBench.eoFold_powerEach size=1024 16,198.4 16,319.7 +0.7%
FoldBench.eoFoldMap size=512 1,380.9 1,370.8 -0.7%
KyoDiBench.handMapDrillModify - 34.6 34.8 +0.7%
OrderAvroBench.eoModifyNames size=64 3,264.4 3,240.7 -0.7%
ZioDiBench.handDrillGet - 17.7 17.6 -0.7%
OrderCirceBench.directStreet size=64 813.3 819.1 +0.7%
OrderCirceBench.monocleNames size=512 192,080.0 193,461.0 +0.7%
OrderAvroBench.monocleModifyStreet size=512 37,142.0 36,877.3 -0.7%
GenericsBench.rawLensModify - 3.5 3.5 -0.7%
OpticBuildBench.reuseUse - 813.3 819.0 +0.7%
ReviewBench.eoReverseGet_3 - 14.4 14.5 +0.7%
LensBench.eoModify - 5.7 5.6 -0.7%
OrderCirceBench.hcursorStreet size=8 894.8 901.0 +0.7%
AvroVulcanBench.encode_vulcanRaw - 194.6 193.3 -0.7%
PlatedBench.visitorUniverseExpr n=4096 50,742.8 50,394.9 -0.7%
OrderCirceBench.naiveStreet size=8 2,945.5 2,965.6 +0.7%
PowerSeriesPrismBench.monocle_sparse size=128 4,540.3 4,511.0 -0.6%
AffineFoldBench.mGetOption_6 - 18.0 17.9 -0.6%
OptionalBench.mModify_3 - 55.7 55.3 -0.6%
PlatedBench.eoUniverseDeep n=4096 141,094.3 141,978.5 +0.6%
TraversalBench.eoModify size=8 103.2 103.8 +0.6%
LensBench.mModify - 5.6 5.6 +0.6%
CompositionBench.buildLens3 - 27.6 27.7 +0.6%
OptionalBench.eoModify_3 - 42.0 41.8 -0.6%
MultiFocusCollectBench.naive_tuple3Rewrite - 13.1 13.2 +0.6%
PowerSeriesNestedBench.naive_nested size=4 132.1 131.4 -0.6%
PowerSeriesBench.monocle_powerEach size=1024 54,205.0 54,496.9 +0.5%
MultiFocusBench.eoModify_multiFocus size=256 13,445.4 13,373.7 -0.5%
PlatedBench.mUniverseExpr n=512 326,593.1 324,949.7 -0.5%
OrderCirceBench.eoNamesIor size=512 186,086.4 187,020.7 +0.5%
SchemesBench.eoCata - 62,689.5 62,999.7 +0.5%
OrderJsoniterBench.eoSumPrices size=512 74,172.5 73,807.3 -0.5%
OptionalBench.eoModify_loyalty - 18.1 18.0 -0.5%
OptionalBench.mModify_6 - 90.0 89.6 -0.5%
PrismBench.mRightReverseGet - 2.5 2.5 +0.5%
OrderCirceBench.eoStreetIor size=512 826.5 822.7 -0.5%
PrismBench.mGetRightAbsent - 1.0 1.0 -0.5%
PlatedBench.mTransformExpr n=512 13,128.8 13,069.2 -0.5%
LensBench.mReplace - 5.4 5.4 -0.5%
PlatedBench.visitorUniverseDeep n=512 6,847.2 6,816.6 -0.4%
PowerSeriesBench.eoModify_powerEach size=256 2,642.7 2,654.5 +0.4%
IsoBench.eoGet - 4.6 4.6 -0.4%
PrismBench.eoReverseGet - 2.6 2.6 +0.4%
PlatedBench.visitorTransformDeep n=512 4,582.1 4,562.7 -0.4%
OrderCirceBench.naiveNames size=8 3,024.4 3,036.7 +0.4%
PlatedBench.mTransformExpr n=64 2,223.0 2,214.1 -0.4%
IsoBench.mReverseGet - 4.6 4.6 -0.4%
OrderJsoniterBench.eoSumPrices size=64 9,324.7 9,288.0 -0.4%
PowerSeriesBench.naive_powerEach size=1024 5,594.2 5,616.0 +0.4%
OrderCirceBench.eoNames size=64 23,521.6 23,612.0 +0.4%
MultiFocusBench.naive_sumQty size=256 653.0 650.6 -0.4%
OptionalBench.mModify_loyalty_empty - 1.5 1.5 -0.4%
TraversalBench.mModify size=8 328.9 330.1 +0.4%
CompositionBench.buildLensOptional3 - 27.6 27.5 -0.4%
GenericsBench.genLensModify - 4.0 4.0 +0.4%
KyoDiBench.eoMapDrillModify - 36.6 36.5 -0.3%
GenericsBench.handPrismGetMiss - 0.9 0.9 -0.3%
OrderAvroBench.monocleReadStreet size=64 2,379.5 2,371.8 -0.3%
ClickRecordBench.encode_positional - 4,770.3 4,755.4 -0.3%
PlatedBench.eoUniverseExpr n=512 17,131.7 17,184.2 +0.3%
CompositionBench.reuseLensOptional3 - 42.3 42.2 -0.3%
GenericsBench.handLensModify - 3.6 3.6 -0.3%
SetterBench.eoModify_0 - 3.5 3.5 -0.3%
MultiFocusBench.naive_listMap size=256 2,595.6 2,602.7 +0.3%
CompositionBench.reuseLeaf - 3.6 3.6 -0.3%
MultiFocusCollectBench.eoCollectMap_zipMean - 133.4 133.8 +0.3%
FoldBench.eoFoldPrices size=8 30.4 30.3 -0.3%
PowerSeriesPrismBench.monocle_sparse size=2048 101,718.0 101,471.8 -0.2%
MultiFocusBench.eoModify_multiFocus size=4 195.4 195.8 +0.2%
CapsBench.modifyDirect - 5.7 5.7 -0.2%
OptionalBench.mReplace_loyalty - 12.0 12.0 +0.2%
OrderCirceBench.monocleNames size=8 3,402.3 3,394.9 -0.2%
CapsBench.modifyDerivedHeld - 5.8 5.8 +0.2%
JsoniterBench.jReplaceId size=64 707.6 706.2 -0.2%
OrderAvroBench.naiveModifyStreet size=512 36,795.5 36,723.9 -0.2%
PowerSeriesNestedBench.eoModify_nested size=16 1,195.3 1,193.0 -0.2%
PowerSeriesBench.naive_powerEach size=4096 21,158.0 21,196.7 +0.2%
ZioDiBench.handServiceReplace - 92.2 92.0 -0.2%
TraversalBench.eoFoldPrices size=64 221.2 221.6 +0.2%
ZioDiBench.handServiceGet - 17.6 17.6 -0.2%
PowerSeriesPrismBench.monocle_sparse size=8 370.1 370.7 +0.2%
SetterBench.eoModify_3 - 12.0 12.1 +0.2%
OrderJsoniterBench.eoModifyStreet size=8 258.7 258.3 -0.2%
AvroVulcanBench.decode_vulcanRaw - 153.1 152.9 -0.2%
OptionalBench.eoModify_0 - 19.1 19.1 -0.2%
MultiFocusCollectBench.naive_zipMeanBroadcast - 221.0 221.3 +0.2%
AvroEncodeRouteBench.eo_encodeValue - 478.8 479.6 +0.2%
ZioDiBench.eoDrillModify - 94.9 95.0 +0.1%
FoldBench.eoFoldPrices size=512 2,485.2 2,488.8 +0.1%
FoldBench.mFoldMap size=512 1,364.7 1,362.9 -0.1%
AvroBytesBench.naiveModifyCountry - 2,434.0 2,430.7 -0.1%
PowerSeriesPrismBench.monocle_sparse size=32 1,190.7 1,192.2 +0.1%
CapsBench.modifyDerivedPerCall - 5.7 5.7 -0.1%
ZioDiBench.handDrillModify - 102.1 102.0 -0.1%
FoldBench.mFoldPrices size=8 30.2 30.3 +0.1%
PowerSeriesBench.eoModify_powerEach size=4 98.0 97.9 -0.1%
PrismBench.mGetOptionPresent - 0.9 0.9 +0.1%
MultiFocusCollectBench.naive_tuple6Rewrite - 24.8 24.8 -0.1%
IsoBench.mGet - 4.6 4.6 +0.1%
ZioDiBench.eoServiceReplace - 80.2 80.1 -0.1%
OrderCirceBench.monocleNames size=64 21,986.5 21,971.7 -0.1%
AvroBytesBench.naiveReadPartner - 1,800.6 1,799.7 -0.0%
PrismBench.mGetRightPresent - 2.7 2.7 +0.0%
OptionalBench.mReplace_0 - 5.6 5.6 +0.0%
OrderAvroBench.eoModifyStreet size=64 95.1 95.1 -0.0%
AvroBytesBench.naiveModifyPartner - 2,802.7 2,802.1 -0.0%
SetterBench.eoModify_orderId - 5.5 5.5 +0.0%
ReviewBench.naiveBuild_0 - 3.5 3.5 -0.0%
PowerSeriesBench.naive_powerEach size=64 341.1 341.0 -0.0%
OrderCirceBench.monocleStreet size=8 2,938.8 2,938.8 +0.0%

base_sha: 5a2802214e7c3f0caf08b6a4852edaf3c62666d0 · head_sha: 470caa7a583e4d71557ed1d2cb69fca7b9a81bad · jdk: temurin-21 · runner: ubuntu-22.04 · jmh_params: -i 3 -wi 2 -f 1 -t 1 -foe true -prof gc -rf json -jvmArgsAppend -XX:-ResizeTLAB -jvmArgsAppend -Xms1g -jvmArgsAppend -Xmx1g · profile: pr:-i3-wi2-f1-t1-gc-rt1g

github-actions Bot and others added 2 commits October 3, 2026 10:18
…over; supersede the grate-constancy spike

- collectList: replace the unobserved[o.X] stand-in with the bundle's real
  context, so composite/Prism/Optional provenances rebuild correctly
  (empty composite -> Nil, prepend-zero Prism miss -> unchanged) instead of
  NPE/MatchError. Contract documented: singleton FOCUS VECTOR, not
  necessarily singleton source.
- MultiFocusCrossFamilySpec: runtime twin of CompositionMatrixSpec across
  every inbound provenance + collectList boundary tests.
- docs/research: keep the #129 spike record with a SUPERSEDED banner; add
  2026-10-05-multifocus-redesign.md consolidating the review into the
  decision to rebuild the grate side on a product-indexed (full-grid)
  IndexedGlass. The grate-sum machinery itself is withdrawn from this PR.
@kryptt

kryptt commented Oct 5, 2026

Copy link
Copy Markdown
Contributor Author

Superseded: the grate-constancy design is withdrawn

Round-2 review probes (see docs/research/2026-09-30-grate-broadcast-constancy.md banner and docs/research/2026-10-05-multifocus-redesign.md) showed the sum-bundle + Optic.SameFocus design cannot be made consistent: the C =:= D evidence it needs is compile-time-only, so equivalent optics behave differently through a non-inline generic helper or a dimap wrapper; grouping becomes observable across type-changing intermediates; and the diagonal restore addresses positions with ==, which is not a coordinate identity (NaN writes silently dropped vs main; signed zeros collide). All four trace to one root: the Function1[X0, *] carrier shares a single index between nested optics, so nested composition is diagonal — a partial read no witness can repair soundly.

Decision: full-grid. The grate side will be re-implemented around a product-indexed split/rebuild optic (IndexedGlass, Grate = its Context = Unit case), which dissolves all four holes structurally — no equality evidence, no witness, no index-== addressing.

What this branch now carries

The variable-shape (non-grate) fixes from the spike, rebased onto current main — independent of the grate redesign and safe to land:

  • collectList hands from the real context its own read produced instead of the unobserved stand-in (fixes NPE / MatchError on composite / Prism / Optional provenances; empty composite now lawfully rebuilds Nil).
  • Contract corrected in Scaladoc + site docs: the singleton guarantee is about the focus vector passed to reconstruction, not the reconstructed source.
  • MultiFocusCrossFamilySpec — the runtime twin of CompositionMatrixSpec (20 examples / 1901 expectations) across every inbound provenance, both composition directions, outbound ModifyF/Forget[List] projections, and explicit collectList boundary tests.
  • Research notes: the spike record marked SUPERSEDED, plus the consolidation/design decision note.

The withdrawn grate machinery leaves no residue: no SameFocus, CoordinateEq, Focus sum, or new user-facing givens.

Gates

sbt 1.13.0 (local JDK 27; CI lanes cover 17/21/25): root test green, scalafmtCheckAll, scalafixAll --check, githubWorkflowCheck, docs/mdoc green.

@kryptt kryptt changed the title feat(core): express grate constancy in the bundle, on top of #127 fix(core,tests): collectList threads the read's real leftover; grate-constancy design withdrawn (superseded) Oct 5, 2026
…tic (full-grid composition)

Standalone spike for the grate re-design (docs/research/2026-10-05-multifocus-redesign.md
SS5 phase 1). Composition yields index (I, J) and context (Ctx, I => inner.Ctx): no
C =:= D evidence, no index-== addressing, no SameFocus-style witness. Grate alias =
Context = Unit case (not yet composition-closed — normalization is an open item).
GlassSpec: 10 examples / 505 expectations covering arbitrary tabulations, 3-level
associativity, type-changing composition through a non-inline generic helper,
permuted/empty/Unit/NaN/signed-zero indexes, and the explicit full-grid vs
diagonal semantic change.
@kryptt kryptt changed the title fix(core,tests): collectList threads the read's real leftover; grate-constancy design withdrawn (superseded) fix(core,tests): collectList real leftover + PROTOTYPE IndexedGlass (full-grid grate successor; grate-sum design withdrawn) Oct 5, 2026
@kryptt kryptt changed the title fix(core,tests): collectList real leftover + PROTOTYPE IndexedGlass (full-grid grate successor; grate-sum design withdrawn) refactor(core): separate IndexedGlass from container MultiFocus Oct 6, 2026
@kryptt kryptt changed the title refactor(core): separate IndexedGlass from container MultiFocus refactor(core): separate Indexed from container MultiFocus Oct 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant